A bank is a contiguous portion of computer memory containing instructions, data, or both. Banks may be used as units of addressing and program protection. Programs within an application often see each bank as occupying a band of relative addresses. When a program seeks to use a particular bank, the program bases the bank, whereby a mapping is provided between relative addresses specified by the bank and absolute addresses. The hardware within a server may provide special “base registers” to provide the mapping between relative addresses and absolute addresses. In conventional systems, every memory reference uses a base register.
An operating system may manage banks by placing them in memory when requested by an application. For example, a Message Control Bank (MCB) is a protected server subsystem that implements message queues for transaction processing with the banks. The MCB communicates with a transaction scheduler in the operating system. The MCB also provides the APIs for applications to send and receive messages from the message queues. As server functions are increasing, the number of transactions processed by a server also increase. For example, database servers may process thousands of transactions per second. As the functionality of servers and the number of transactions processed by servers continue to rapidly increase, the drawbacks of conventional MCBs are becoming more apparent.
Conventionally, MCBs operate in a base mode of an operating system. The primary drawbacks with these conventional MCBs that operate as basic mode products center around their mechanisms for controlling temporary storage of message data and for controlling how data is shared between multiple programs in an application or multiple activities within the programs. For example, a conventional MCB often suffers from limited addressing because the banks used for conventional MCBs have a relatively small size while the demand for more and larger messages to be stored in the banks continues to increase. The size and number of messages that can be stored using conventional MCBs are limited. In conventional MCBs, a small message is stored in one single small block within one bank. A larger message is stored in multiple blocks within one bank. A conventional MCB employs a paging algorithm when the supply of these blocks is depleted. A used block is selected and its contents are written to a Memory Retention File (MRF) and that block of memory is made available for reuse. When the data formerly held in that block of memory are needed, that data must be read back into memory from the MRF, possibly using a different block in memory, and possibly requiring another invocation of the paging algorithm to make a memory block available. This paging comes with a performance penalty due primarily to the I/O overhead. Using multiple banks provides some relief, but there can be only a few such banks in one MCB. Even with the maximum permitted banks, the memory space for these messages is sometimes inadequate.